/*
 * cubelist.h
 *
 *  Created on: Mar 20, 2012
 *      Author: soselar
 */

#ifndef CUBELIST_H_
#define CUBELIST_H_

#include "cube.h"
#include <vector>
#include <fstream>
#include <string>
#include <iterator>
#include <stdlib.h>
#include <stdio.h>
#include <iostream>

class cubelist
{
public:
	vector<cube> cover;
	vector<int> index;
	vector<int> tree_index;
	vector<int> tree_v;
	int icount;

//	cubelist & operator = (const cubelist &);
//	cubelist & operator += (const cubelist &);
//	cubelist(fstream *);
	cubelist(){};
	void output(FILE *);
	bool compare_cube(cube, cube);
	bool b2();

	void sort();
	void print_tree();
	void time(int, int);
	cubelist cofactor(cube);
	void prime();
	void consensus(cubelist);
	void intersect_consensus(int);
	void scc();

	int test();
	void essential1();
	void essential2();
	void cofactor(int);
	int containing(cube, cube);
	bool tautology();
	bool unate();
	int split_var();
	void split(int, int);
};

#endif /* CUBELIST_H_ */
